package cliente.hospede;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import cliente.tipos.Hospede;

import mensagens.EnviaDados;
import mensagens.ManterHospede;
import mensagens.ManterReserva;
import mensagens.Mensagem;

import cpf.CPF;

@SuppressWarnings("serial")
public class ExecutaCadastrarHospede extends AbstractAction{
	
	private CadastrarHospede ch;
	
	public ExecutaCadastrarHospede(CadastrarHospede ch) {
		setCh(ch);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if("fechar".equals(e.getActionCommand())){
			getCh().getTfCadastrarHospede().dispose();
		} else if("inserir".equals(e.getActionCommand())){
			// Lê o nome e o cpf
			String nomeR = getCh().gettNomeHospede().getText();
			String cpfR = getCh().gettCPF().getText();
			if(!CPF.validaCPF(cpfR)){
				JOptionPane.showMessageDialog(getCh().getTfCadastrarHospede(),"Informe um CPF válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			if(nomeR.length() == 0){
				JOptionPane.showMessageDialog(getCh().getTfCadastrarHospede(),"O Nome não pode ser vazio!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			// Cria uma mensagem do tipo ManterHospede, com subtipo 1
			ManterHospede mh = new ManterHospede(1);
			// Cria um novo hóspede para enviar
			Hospede h = new Hospede();
			// Ajusta o nome e cpf do hóspede
			h.setNome(nomeR);
			h.setCpf(cpfR);
			// Salva o hóspede como hóspede da mensagem a ser enviada
			mh.setHospede(h);
			// Envia a mensagem e guarda a mensagem de resposta em mensagemRetornada
			Mensagem mensagemRetornada = EnviaDados.enviarMensagem(mh);
			ManterHospede msgResponse = null;
			// Verifica se a mensagem retornada é do tipo correto
			if(mensagemRetornada instanceof ManterHospede){
				msgResponse = (ManterHospede) mensagemRetornada;
				System.out.println("OK ----------------");
			} else {
				System.out.println("Erro! Mensagem errada recebida!");
				System.out.println("Erro! "+mensagemRetornada.getClass());
				return;
			}
			
			if(msgResponse.getTipoManterHospede() == 11){
				// Mostra a informaçao que o cadastro foi efetuado com sucesso
				JOptionPane.showMessageDialog(getCh().getTfCadastrarHospede(),"Hóspede cadastrado com sucesso!", "Info!",JOptionPane.INFORMATION_MESSAGE);
				// Sai do cadastrar hospede
				getCh().getTfCadastrarHospede().dispose();
			} else {
				JOptionPane.showMessageDialog(getCh().getTfCadastrarHospede(),"Ocorreu um erro ao cadastrar o hóspede (já cadastrado?)!", "Erro!",JOptionPane.ERROR_MESSAGE);
			}
		}
		
	}

	public void setCh(CadastrarHospede ch) {
		this.ch = ch;
	}

	public CadastrarHospede getCh() {
		return ch;
	}

}
